<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>策略模式(Strategy)</title>
	</head>
	<body>
		<script>
			// 价格策略对象
			var PriceStrategy = function(){
				// 内部算法对象
				var strategy = {
					// 100 返 30
					return30: function(price){
						// parseInt 可通过~~、|等运算符替换，要注意此时price要在[-2147483648,2147483647]之间
						// +price 转化为数字类型
						return +price + parseInt(price / 100) * 30;
					},
					// 100 返 50
					return50: function(price){
						return +price + parseInt(price / 100) * 50;
					},
					// 9折
					percent90: function(price){
						// Javascript 在处理小数乘除法有bug，故运算前转化为整数
						return price * 100 * 90 / 10000;
					},
					// 8折
					parcent80: function(price){
						return price * 100 * 80 / 10000;
					},
					// 5折
					parcent50: function(price){
						return price * 100 * 50 / 10000;
					}
				}
				// 策略算法调用接口
				return function(algorithm, price){
					// 如果算法存在，则调用算法，否则返回false
					return strategy[algorithm] && strategy[algorithm](price);
				}
			}();

			// 测试用例
			var price = PriceStrategy('return50', '314.67');
			console.log(price);
		</script>
	</body>
</html>
